/**
 * @Author: easten
 * @Created: 2024-07-16 15:43:13
 * @Description: 数据类型定义
 *
 */

import { AxiosInstance } from "axios";

// 请求响应参数（不包含data）
export interface Result {
  code: number;
  msg: string;
}

// 请求响应参数（包含data）
export interface ResultData<T = any> extends Result {
  data: T;
}

// 分页响应参数
export interface ResPage<T> {
  list: T[];
  total: number;
}

// 分页请求参数
export interface ReqPage {
  id?: number;
  /** 页码 */
  pageNum?: number;
  /** 数量 */
  pageSize?: number;
  /** 排序字段 */
  sortField?: string;
  /** 排序方式 */
  sortOrder?: string;
  /** 关键字 */
  searchKey?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 状态 */
  status?: number;
  /** 设备ID */
  deviceCode?: number;
  /** 产品编码 */
  dtCode?: number;
  /** 网关id */
  gatewayId?: number;
  /** 终端id */
  deviceId?: number;
}

/** id请求参数 */
export interface ReqId {
  /** id */
  id: number | string;
}

/**
 * 设备标准数据
 */
export interface IotDeviceData {
  // 网关id
  gatewayId?: number;

  // 终端id
  terminalId?: number;

  // 设备ID
  deviceCode?: number;

  // 产品编码
  dtCode?: number;

  // 值1
  value1?: number;

  // 值2
  value2?: number;

  // 值3
  value3?: number;

  // 值4
  value4?: number;

  // 值5
  value5?: number;

  // 设备状态
  // 温度：0 正常、1预警、2报警、3故障
  status?: number;

  // 采集时间
  time?: string;
}

/**
 * 分页查询参数
 */
export type PageParams = {
  pageNum: number;
  pageSize: number;
  total: number;
};

/**
 * 验证码
 */
interface ValidCode {
  /**  验证码 */
  validCode: string;
  /** 验证码请求号 */
  validCodeReqNo: string;
}
/**
 * 树形结构数据  组装树形结构数据
 */
export interface TreeDataModel {
  id?: number;
  parentId?: number;
  label: string;
  value: any;
  data?: any;
  code?: string;
  type?: number;
  children?: TreeDataModel[];
  deviceCode?: number;
}

/**
 * 抽屉属性
 */
export type DrawerProps = {
  axios?: AxiosInstance;
  edit?: boolean;
  open?: boolean;
  copy?: boolean;
  value?: any;
  onClose?: (value: boolean) => void;
  onSuccess?: (value?: boolean) => void;
};

/**
 * 模块组件通用属性
 */
export type ModuleCommonProps = {
  axios: AxiosInstance;
  className?: string;
  permissions?: string[];
};

/**
 * 账号密码登录表单
 */
export interface LoginForm extends ValidCode {
  account: string;
  password: string;
  tenantId?: number | string;
}

/**
 * 手机号登录表单
 */
export interface PhoneLoginForm extends ValidCode {
  /** 手机号 */
  phone: string;
  /** 租户Id */
  tenantId?: number | string;
}

/** 获取手机验证码请求 */
export interface ReqPhoneValidCode extends ValidCode {
  /** 手机号 */
  phone: string;
}

/**
 * 注销表单
 */
export interface Logout {
  token: string;
}

// 登录返回
export interface Login {
  /** token */
  token: string;
  /** 默认模块 */
  defaultModule: string;
  account?: string;
  name?: string;
}

/**
 * 验证码返回
 */
export interface ReqValidCode {
  /** 验证码 */
  validCodeBase64: string;
  /** 验证码请求号 */
  validCodeReqNo: string;
}

/** 用户信息 */
export interface LoginUserInfo {
  /** 用户id */
  id: string | number;
  /** 用户名 */
  account: string;
  /** 用户姓名 */
  name: string;
  /** 用户昵称 */
  nickname: string;
  /** 用户头像 */
  avatar: string;
  /** 用户性别 */
  gender: string;
  /** 民族 */
  nation: string;
  /** 出生日期 */
  birthday: string;
  /** 家庭住址 */
  homeAddress: string;
  /** 电话号码 */
  phone: string;
  /** 邮箱 */
  email: string;
  /** 用户签名 */
  signature: string;
  /** 默认模块 */
  defaultModule: number | string;
  /** 组织全程 */
  orgNames: string;
  /** 职位名称 */
  positionName: string;
  /** 按钮码集合 */
  buttonCodeList: string[];
  /** 权限码集合 */
  permissionCodeList: string[];
  /** 角色码集合 */
  roleCodeList: string[];
}
